package pl.edu.agh.ki.ewywiadowka.client;

import java.util.LinkedList;

import pl.edu.agh.ki.ewywiadowka.client.Const.Error;
import pl.edu.agh.ki.ewywiadowka.client.dto.AbsenceDTO;
import pl.edu.agh.ki.ewywiadowka.client.dto.AttendantDTO;
import pl.edu.agh.ki.ewywiadowka.client.dto.ClassDTO;
import pl.edu.agh.ki.ewywiadowka.client.dto.MarkDTO;
import pl.edu.agh.ki.ewywiadowka.client.dto.StudentDTO;
import pl.edu.agh.ki.ewywiadowka.client.dto.SubjectDTO;
import pl.edu.agh.ki.ewywiadowka.client.dto.SystemUserDTO;
import pl.edu.agh.ki.ewywiadowka.client.dto.TeacherDTO;

import com.google.gwt.user.client.rpc.AsyncCallback;

/**
 * The async counterpart of <code>GreetingService</code>.
 */
public interface EWywiadowkaServiceAsync {

	public void registerClass(ClassDTO clas,
			AsyncCallback<Const.Error.ClassRegisterMsg> asyncCallback);

	public void removeClass(ClassDTO clas,
			AsyncCallback<Const.Error.ClassRemoveMsg> asyncCallback);

	public void modifyClass(ClassDTO clas,
			AsyncCallback<Const.Error.ClassModifyMsg> asyncCallback);

	public void registerStudent(StudentDTO student,
			AsyncCallback<Const.Error.StudentRegisterMsg> asyncCallback);

	public void removeStudent(StudentDTO student,
			AsyncCallback<Const.Error.StudentRemoveMsg> asyncCallback);

	public void modifyStudent(StudentDTO student,
			AsyncCallback<Const.Error.StudentModifyMsg> asyncCallback);

	public void registerAttendant(AttendantDTO attendant,
			AsyncCallback<Const.Error.AttendantRegisterMsg> asyncCallback);

	public void removeAttendant(AttendantDTO attendant,
			AsyncCallback<Const.Error.AttendantRemoveMsg> asyncCallback);

	public void modifyAttendant(AttendantDTO attendant,
			AsyncCallback<Const.Error.AttendantModifyMsg> asyncCallback);

	public void registerTeacher(TeacherDTO teacher,
			AsyncCallback<Const.Error.TeacherRegisterMsg> asyncCallback);

	public void modifyTeacher(TeacherDTO teacher,
			AsyncCallback<Const.Error.TeacherModifyMsg> asyncCallback);

	public void removeTeacher(TeacherDTO teacher,
			AsyncCallback<Const.Error.TeacherRemoveMsg> asyncCallback);

	public void getSystemUser(String login, String pass,
			AsyncCallback<SystemUserDTO> asyncCallback);

	public void getSubjects(AsyncCallback<LinkedList<SubjectDTO>> asyncCallback);
	
	public void getClassSquad(ClassDTO clas, AsyncCallback<LinkedList<StudentDTO>> asyncCallback);
	
	public void getSubjectTeacherForClass(SubjectDTO subject, StudentDTO student, AsyncCallback<TeacherDTO> asyncCallback);
	
	public void getSingleMarks(StudentDTO student, SubjectDTO subject, AsyncCallback<LinkedList<MarkDTO>> asyncCallback);
	
	public void getPotentialEducators(AsyncCallback<LinkedList<TeacherDTO>> asyncCallback);
	
	public void removeSingleMark(MarkDTO mark, AsyncCallback<Boolean> asyncCallback);
	
	public void addSingleMark(MarkDTO mark, TeacherDTO teacher, AsyncCallback<Boolean> asyncCallback);
	
	public void getFinalMark(StudentDTO student, SubjectDTO subject, AsyncCallback<MarkDTO> asyncCallback);
	
	public void removeFinalMark(MarkDTO mark, AsyncCallback<Boolean> asyncCallback);
	
	public void setFinalMark(MarkDTO mark, TeacherDTO teacher, AsyncCallback<Boolean> asyncCallback);
	
	public void getEducatorsClass(TeacherDTO educator, AsyncCallback<ClassDTO> asyncCallback);
	
	public void getAbsences(StudentDTO student, AsyncCallback<LinkedList<AbsenceDTO>> asyncCallback);
	
	public void removeAbsence(AbsenceDTO absence, AsyncCallback<Boolean> asyncCallback);
	
	public void addAbsence(AbsenceDTO absence, AsyncCallback<Const.Error.AbsenceRegisterMsg> asyncCallback);
	
	public void excuseAbsence(AbsenceDTO absence, AsyncCallback<Boolean> asyncCallback);
	
	

	public void getClasses(AsyncCallback<LinkedList<ClassDTO>> asyncCallback);

	public void getStudents(AsyncCallback<LinkedList<StudentDTO>> asyncCallback);

	public void getTeachers(AsyncCallback<LinkedList<TeacherDTO>> asyncCallback);

	public void getAttendants(
			AsyncCallback<LinkedList<AttendantDTO>> asyncCallback);


}
